const logger = require('../config/logger');

// 全局错误处理中间件
const errorHandler = (err, req, res, next) => {
  logger.error('全局错误捕获:', err);

  // 数据库连接错误
  if (err.code === 'ECONNREFUSED') {
    return res.status(500).json({
      code: 500,
      message: '数据库连接失败',
      data: null,
      timestamp: Date.now()
    });
  }

  // JWT错误
  if (err.name === 'JsonWebTokenError') {
    return res.status(401).json({
      code: 401,
      message: '无效的访问令牌',
      data: null,
      timestamp: Date.now()
    });
  }

  // 验证错误
  if (err.name === 'ValidationError') {
    return res.status(400).json({
      code: 400,
      message: '数据验证失败',
      data: err.details || null,
      timestamp: Date.now()
    });
  }

  // SQL错误
  if (err.code && err.code.startsWith('ER_')) {
    return res.status(500).json({
      code: 500,
      message: '数据库操作失败',
      data: process.env.NODE_ENV === 'development' ? err.message : null,
      timestamp: Date.now()
    });
  }

  // 默认错误
  res.status(err.status || 500).json({
    code: err.status || 500,
    message: err.message || '服务器内部错误',
    data: process.env.NODE_ENV === 'development' ? err.stack : null,
    timestamp: Date.now()
  });
};

// 404处理中间件
const notFoundHandler = (req, res) => {
  res.status(404).json({
    code: 404,
    message: `接口 ${req.method} ${req.path} 不存在`,
    data: null,
    timestamp: Date.now()
  });
};

module.exports = {
  errorHandler,
  notFoundHandler
}; 